package com.wx.smallchange.oop;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;

/**
 * ClassName:SmallChangeSysOOP
 * Package :com.wx.smallchange.oop
 * Description :
 *
 * @Author : coder_mu
 * @Create : 2023/5/28 - 14:25
 */
public class SmallChangeSysOOP {
    //先定义相关的属性
    boolean loop = true;
    Scanner scanner = new Scanner(System.in);//用户输入
    int key;//定义一个key用来接收用户输入，然后进行switch case判断选择用户想要的操作
    //1.完成页面的粗略显示
    //2.完成零钱通明细
    String details = "-----------------零钱通明细-----------------" + "\n";
    //3.完成收益入账
    double money = 0;//入账金额
    double balance = 0;//余额
    Date date = null;//收益日期
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM--dd HH:mm");//日期格式化，不格式化的话会显示国际样式，不便于观察
    //4. 消费
    //定义新变量，保存消费的原因
    String note = "";

    //完成显示菜单，并且可以完成功能选择
    public void mainMenu() {
        do {
            System.out.println("=========零钱通菜单=========");
            System.out.println("1 零钱通明细");
            System.out.println("2 收益入账");
            System.out.println("3 消费");
            System.out.println("4 退出");
            System.out.println("请选择(1-4):");
            key = scanner.nextInt();
            switch (key) {
                case 1:
                    this.detail();//this代表当前对象，当前对象调用对应的方法
                    break;
                case 2:
                    this.income();
                    break;
                case 3:
                    this.pay();
                    break;
                case 4:
                    this.exit();
                    break;
                default:
                    System.out.println("选择有误，请重新选择");
            }
        } while (loop);
    }

    //零钱通明细
    public void detail() {
        System.out.println(details);
    }

    //收益入账方法
    public void income() {//void不能由返回值，但是可以直接return,后面不能跟返回值
        System.out.print("收益入账金额:");
        money = scanner.nextDouble();
        //校验入账金额是否符合常理，不能入账小于0
        //采用过关斩将的思想，就是正确条件的反面来判断，设置一道道关卡
        if (money <= 0) {
            System.out.println("收益入账金额应该大于等于0");
            return;
        }
        balance += money;//余额加上收益的金额
        date = new Date();//获取当前时间
        details += "收益金额 +" + money + "\t" + sdf.format(date) + "\t" + "余额:" + balance + "\n";//收益明细
    }

    //消费方法
    public void pay() {
        System.out.print("消费金额:");
        money = scanner.nextDouble();
        if (money <= 0 || money > balance) {
            System.out.println("你的消费金额应该早0-" + balance + "元之间,不能超过这个范围");
            return;
        }
        System.out.print("消费说明:");
        note = scanner.next();
        balance -= money;
        //拼接消费信息到 details
        date = new Date(); //获取当前日期
        details += note + " -" + money + "\t" + sdf.format(date) + "\t" + "余额:" + balance + "\n";
    }

    //退出方法
    public void exit() {
        //输入4退出
        System.out.print("你是否要退出(y/n):");
        String choice = "";//定义一个变量接收用户输入的选择
        while (true) {
            //用户必须输入y/n,否则就一直循环
            choice = scanner.next();
            if ("y".equals(choice)) {
                loop = false;//将loop赋值为false可以退出最外层的大循环
                System.out.println("已退出零钱通");
                break;//退出switch选择语句
            } else if ("n".equals(choice)) {
                break;//退出switch选择语句，进入主循环
            }
        }
    }
}
